﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Visibilite
{

    class clA
    {
        private int x = 12;
        int y = 10;
        protected string Id = "xxxxx"; // protected est accessible que dans la classe fille
        internal int valeur = 100;
        public string nom = "départ";

        public virtual void Afficher()
        {
            Console.WriteLine("Afficher depuis clA : Id={0}, Valeur={1}, nom={2}", Id, valeur,nom);
        }
    }

    class clB : clA
    {
        public new  string Id="totot"; // enlevez le mot new et observez le message du compilateur
        internal new  int valeur = 200; // enlevez le mot new et observez le message du compilateur
        public override void Afficher()
        {
            Console.WriteLine(" - Afficher depuis clB : Id={0}, Valeur={1}, nom={2}", Id, valeur, nom);
        }
    }

    class Exercice
    {
        public static void Main(string[] args) // méthode principale de lancement de l'exécution
        {
            clA objA = new clA();

            objA.Afficher();

           // objA.x = -1; // inaccessible car déclaré private
           // objA.y = -2; // inaccessible car private par défaut
            //objA.Id = "abcde"; // inaccessible car déclaré protected
            objA.valeur = -3; // accessible car déclaré internal
            objA.nom = "autre objet A"; // accessible car déclaré public

            objA.Afficher();
                        
            clB objB = new clB();

            objB.Afficher();

           objB.valeur = -100;// accessible car hérité internal
          objB.nom = "autre objet B";// accessible car hérité public

            objB.Afficher();

            Console.ReadLine();
        }
    }
}
